#操作符
def fuhao:
'''
幂运算 **
正负号 +x -x
算术符
    * / //(地板除法) %(取余)
    + -
比较符 < <= > >= == !=
逻辑运算符 and or not

+连接操作符
*重复操作符
in成员操作符
not in
'''

#字符串 | bool,int,float,str
def str:
'''
切片
str1 = 'i love you'
str1[:6]   #返回 'i love'
str2 = str1[:6] + ',' + str1[6:]

dir(str) 内置方法
str = 'xiaoXie'
str.capitalize() #首字母转大写
str.casefold()   #转小写
str.count('o')   #统计o出现的次数
str.find('o')    #返回o出现的位置,从左开始找
str.rfind('o')   #返回o出现的位置,从右开始找
str.startwith()  #检查参数是否以什么开头
str.endwith()    #检查以什么结束
str2 = 'i love you'
str2.isanum()
str2.isalpha()
str2.isdecimal()
str2.isdigit()
str2.islower()
str2.isnumeric() #是否是数字
str2.isspace() #是否只包含空格
str2.istitle() #是否都是首字母大写,其他小写
str2.isupper() #是否都是大写
str2.join('12345') #将str2插入到字符串中间
str2.ljust(width)  #字符串左对齐
str2.upper()       #转大写
str2.lower()       #转小写
str2.strip()       #去掉前后空格
str2.lstrip()      #去掉左边空格
str2.partition(',')  #以,分割字符串成元组(前,中,后)
str2.replace('i','I')  #替换字符串中的字符
str2.split(',')    #以,分割字符串成列表
str2.swapcase()    #f反转大小写
str2.title()       #返回标题化
str2.translate({99,89})  #按规则转化
str2.zfill(width)    #字符串右对齐,左边0填充

格式化
位置参数
str = "{0} love {1}.{2}".format('i','baidu','com')
关键词参数
str = "{a} love {b}.{c}".format(a='i',b='baidu',c='com')
str = "{0:.1f}{1}".format(27.658, 'GB')  #返回27.7GB

百分号
'%c' % 97    #assic码转字符,返回'a'
'%c,%c,%c'%(97,97,97) #返回 'a,a,a'
'%s' % "i love you"   #返回 i love you
'%d' % 4.5   #格式化整数,返回 4
%o格式化8进制, %x16进制, %X格式化无符号16进制(大写)
'%f' % 27.658  #返回 27.658000
%f,%E,%g,%G  #格式化显示小数
辅助操作命令
m.n  #m表示左边最小总宽度,你表示右边最大宽度
- 用于左对齐
+ 在正数前面显示(+)
# 8进制前显示0o, 16进制显示0X
0 表示在显示数字q前面填充0代替空格
'%5.1f' % 9.23   #返回'  9.2'
'%08d' % 99      #返回'00000099'

字符串转义符
\'
\\
\t
\n
查看手册
'''

def set:
#字典,dict
'''
定义
dict1 = {1:'one',2:'two',3:'three'}
dict2 = dict((('a','A'),('b','B')))
dict3 = dict([('a','A'),('b','B')])
dict4 = dict(a='A',b='B')
dict5 = set([1,2,3,3]) #返回 {1,2,3} 字典会自动去重

利用字典特性列表去重
list(set([1,2,3,3,2,1]))  #返回[1,2,3] 顺序随机

获取
dict2['a']

赋值
dict2['c'] = 'C'

dict5 = {}
dict5.fromkeys(1,2,3) #返回 {1:None,2:None,3:None}
dict5.fromkeys(range(32),'赞')  #32个赞

dir(dict) 内置方法
dict5.keys()
dict5.values()
dict5.items()
dict5.pop(1)  #弹出键对应的元素
dict5.popitem() #随机弹出一个元素
dict5.setdefault(33,'赞')  #添加一个值
dict5.add('赞') #添加
dict5.remove('赞') #移除
b = {33,'不赞'}
dict5.update(b)  #更新

a = frozenset([1,2]) #不可变集合
set() #可变集合
'''

def list:
#列表:打了激素的数组
'''
python没有数据类型,全是对象
so,python没有数组, 只有列表对象
#列表里面的元素可以是多种多样的
member = ['刘德华','张学友','郭富城',[1,2,3,4],(2,2,3,4),100,99.99]

#添加,删除元素,排序,反转,统计元素个数,和查找元素位置
dir(list)  #查看list内置方法
member.append('黎明')
member.extend(['a','b'])
member.insert(位置, 要插入的元素)
member.remove('刘德华')
member.pop()  #删除最后一个元素, 返回最后一个元素
member.pop(0) #删除第一个元素
del member[0] #删除第一个元素
del member    #删除整个列表
member.reverse()
member.count('刘德华')
member.sort()
member.sort(reverse=True)

#列表切片
arr = [a,b,c,d,e,f,g]
arr2 = arr[:]    #拷贝一个列表   分片拷贝与 arr3=arr 不同, arr3,arr都指向同一内存
arr[1:3]   #返回 [b,c]
arr[:3]    #返回 [a,b,c]
arr[3:]    #[d,e,f,g]

列表的运算符操作
列表可以, +(两个列表相加与extend等效), += , *(重复操作符) , *=, < <=,> >=,in ,not in
#列表的比较是比较第一元素
'''

def tupel:
#元组:戴上镣铐的列表
'''
#创建元组
tuple1 = (1,2,3,4,5,6,7,8) 与 tuple1=1,2,3,4,5,7,8 等效
#只有一个元素时
tuple1 = (1,) 与 tuple1 = 1, 等效
#切片操作
tuple1[1]  #返回2
tuple1[:5] #返回(6,7,8)
tuple1[:2] #返回 (1,2)
#元组只能创建是赋值, 之后不能修改

元组运算操作符
元组 +,< <=,> >=,*,in, not in
(8,)*3   #返回 (8,8,8)
(1,2,3) + (4,) #返回(1,2,3,4)
'''


#序列,迭代(字符串也是迭代对象)
'''
b = list()
b = list('i love you')    #list传入一个可迭代对象
#返回['i', ' ', 'l', 'o', 'v', 'e', ' ', 'y', 'o', 'u']
c = (1,2,3)
c = list(c)
#返回[1, 2, 3]

list将迭代对象插入列表里
tuple和list一样,只是将迭代对象转为元组
len(迭代对象)统计长度
max(迭代对象)取最大值
min(迭代对象)取最小
sum(迭代对象)求和
sorted(迭代对象)排序
reversed(迭代对象) 返回一个反转后的迭代对象
enumerate(迭代对象) 返回
list(enumerate(('a','b','c'))) #返回[(0, 'a'), (1, 'b'), (2, 'c')]
a = ['a','b','c']
b = [1,2]
list(zip(a,b))  #返回[('a', 1), ('b', 2)]
'''
def ifelif:
#判断条件分支
'''
if 条件:
    #todo
elif:
    #todo
else:
    #todo

#三目运算符
x if 条件 else y

#断言
assert 条件
条件为真忽略, 为假.程序抛出异常
'''
def forwhile:
#循环控制
'''
while 条件:
    循环体

for 目标变量 in 字符串/列表/元组:
    循环体

break #退出
continue #继续

range(5) #代表从0到5(不包含5)
range(1,5) #代表从1到5(不包含5)
range(1,5,2) #代表从1到5，间隔2(不包含5)
range 常和 for循环一起用
'''
def fuc:
#函数
'''
def func():
    '文档'
    pass
print(func.__doc__)
1,关键字参数   func(name,keywords)
2,可变参数     func(*args)  可以传入多个参数,也可以直接传入元组
3,命名关键词参数 func(**kw)  可以传入多个关键词参数

函数如果没有return ,返回None
在函数外的变量是全局变量
函数内赋值的变量是局部变量
函数内部只能访问全局变量,不能修改全局变量
函数内定义全局变量
def func():
    global g
    g = 10
    print(g)

函数内可以再定义函数体
def func():
    print(1)
    def func2():
        print(2)
    func2()

函数式编程范式
闭包:
def FunX(x):
    def FunY(y):
        return x*y
    return FunY
FunY就是一个闭包
i = FunX(8)  #返回的是一个函数,也就是FunY
i(5)         #返回40
也可以直接调用 FunX(8)(5)  #返回40

FunY不能对外部变量进行改变.不能修改x的值,只能引用
def FunX(x):
    x = 5
    def FunY():
        nonlocal x   #这样声明了就可以改变x的值
        x *= x
        return x
    return FunY

匿名函数
g = lambda x: 2*x+1
g(5)  #返回11
冒号前是参数 ,冒号后是函数的return 表达式

内置函数
filter(function or None, iterable) 过滤器
list(filter(None,[1,0,False,True]))  #返回[1,True]
list(filter(lambda x:x%2,range(10))) #返回[1,3,5,7,9]

map() 映射
list(map(lambda x:x*2,range(2)))     #返回0,2,4

递归
python3可以定义递归的深度
分治思想
阶乘
斐波拉切
汉诺塔
'''


def file:
'''
文件
f = open(文件路径,打开模式)
打开模式
‘r'	open for reading (default)
‘w'	open for writing, truncating the file first
‘a'	open for writing, appending to the end of the file if it exists
‘b'	binary mode
‘t'	text mode (default)
‘+'	open a disk file for updating (reading and writing)
‘U'	universal newline mode (for backwards compatibility; should not be used in new code)

f.read(字节数)  读文件
f.readline()   以写模式打开,如果文件存在末尾追加写入
f.write(str)   将字符串写入文件
f.writelines(可迭代对象) 向文件写入字符串序列
f.seek(offset,from)
f.tell()
list(f) 返回文件内容列表
f.close() 关闭文件
'''
